<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /** 纯函数的条件：
     * 1. 确定的输入，一定会产生确定的输出；
     * 2. 函数在执行过程中，不能产生副作用（不能改变传入的值）；
    */
    // 列如： 所以是纯函数
    function sum(s1, s2) {
      return s1 + s2;   //函数里面只是进行了一个相加；满足第二个条件
    }
    sum(10 + 20)  //这里只要输入的是10, 20就一定会输出30；满足第一个条件

     // add函数是否是一个纯函数: 不是一个纯函数
     let foo = 10;
    function add(num) {
      return foo + num;
    }

    add(5); // 15
    foo = 20;
    add(5); // 25

    // 能否将上面的函数改写成一个纯函数
    // add2就是一个纯函数
    const bar = 10;
    function add2(num) {
      return bar + num;
    }

    // bar = 11;

    // add3是一个纯函数吗? 不是一个纯函数
    const baz = {
      count: 10
    }
    function add3(num) {
      return baz.count + num
    }

    baz.count = 20;

    // printInfo是一个纯函数吗? 不是一个纯函数
    function printInfo(info) {
      info.name = "ace";
      console.log(info.name, info.age);
    }

    const obj = {
      name: "ace",
      age: 18
    }

    // printInfo(info);
    
    console.log(obj);


    const info = {
      name: "ace",
      age: 18
    }

    info.name = "sabo";

    const newInfo = {...info, name: "sabo"};


    const form = {
      userName: 'admin',
      passWord: '123456..'
    }
    
    console.log(form);
    console.log({...form, passWord: "Aa123456.."});
  </script>
</body>
</html>